List.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { LevelInfoItem } from "@/api/user";
  2. import clsx from "clsx";
  3. import React from "react";
  4. import styles from "./page.module.scss";
  5. interface Props {
  6. data: LevelInfoItem[];
  7. level: number;
  8. }
  9. const List: React.FC<Props> = ({ data, level = 0 }) => {
  10. const DataList = React.useMemo(() => {
  11. return [
  12. // {
  13. // key: "rescue",
  14. // text: "Rescue",
  15. // render(itemData: LevelInfoItem) {
  16. // return `${itemData.daily_reward_num}(${itemData.daily_reward_multiple_num})%`;
  17. // },
  18. // },
  19. {
  20. key: "upgrade",
  21. text: "Upgrade",
  22. render(itemData: LevelInfoItem) {
  23. return itemData?.reward[0]?.amount || 0;
  24. },
  25. },
  26. {
  27. key: "day",
  28. text: "Daily",
  29. render(itemData: LevelInfoItem) {
  30. return `${itemData.daily_reward_num}(${itemData.daily_reward_multiple_num})`;
  31. },
  32. },
  33. {
  34. key: "weekly",
  35. text: "Weekly",
  36. render(itemData: LevelInfoItem) {
  37. return `${itemData.weekly_reward_num}(${itemData.weekly_reward_multiple_num})`;
  38. },
  39. },
  40. {
  41. key: "monthly",
  42. text: "Monthly",
  43. render(itemData: LevelInfoItem) {
  44. return `${itemData.monthly_reward_num}(${itemData.monthly_reward_multiple_num})`;
  45. },
  46. },
  47. {
  48. key: "spin",
  49. text: "Spin",
  50. render(itemData: LevelInfoItem) {
  51. return `${itemData?.spin}%`;
  52. },
  53. },
  54. {
  55. key: "bankruptcy",
  56. text: "Bankruptcy",
  57. render(itemData: LevelInfoItem) {
  58. return `${itemData?.first_bankruptcy_reward_num || 0}(${itemData?.second_bankruptcy_reward_num || 0})`;
  59. },
  60. },
  61. ];
  62. }, []);
  63. return (
  64. <div className={"px-[10px]"}>
  65. <div className="flex rounded-[var(--borderRadius)] bg-[#fff]">
  66. <div className={clsx(styles.ListItemBox)}>
  67. <div>Level</div>
  68. {!!data?.length &&
  69. data.map((item) => {
  70. return (
  71. <div
  72. key={item.id}
  73. className={clsx({
  74. "text-[red]": item.id == level,
  75. })}
  76. >
  77. Vip{item.id}
  78. </div>
  79. );
  80. })}
  81. </div>
  82. <div className="flex min-w-[0] flex-1 overflow-auto">
  83. {DataList.map((item: any) => {
  84. return (
  85. <div key={item.key} className={clsx(styles.ListItemBox)}>
  86. <div>{item.text}</div>
  87. {!!data?.length &&
  88. data.map((citem: any) => {
  89. return (
  90. <div
  91. className={clsx({
  92. "text-[red]": citem.id == level,
  93. })}
  94. key={citem.id}
  95. >
  96. {!!item.render && item.render(citem)}
  97. </div>
  98. );
  99. })}
  100. </div>
  101. );
  102. })}
  103. </div>
  104. </div>
  105. </div>
  106. );
  107. };
  108. export default List;